package com.zjcloud.jwgl.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zjcloud.common.annotation.Excel;
import com.zjcloud.common.core.domain.BaseEntity;

import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * 约束模板对象（重构版）
 * 定义约束条件的预设模板
 * 
 * @author zjcloud
 * @date 2024-01-01
 */
public class AcScheduleConstraintTemplate extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    private Long id;

    /** 模板名称 */
    @Excel(name = "模板名称")
    @NotBlank(message = "模板名称不能为空")
    private String templateName;

    /** 模板编码，唯一标识 */
    @Excel(name = "模板编码")
    @NotBlank(message = "模板编码不能为空")
    private String templateCode;

    /** 模板描述 */
    @Excel(name = "模板描述")
    private String description;

    /** 模板分类：SYSTEM-系统模板，CUSTOM-自定义模板 */
    @Excel(name = "模板分类")
    private String category;

    /** 适用对象类型：GENERAL-通用，PRIMARY-小学，MIDDLE-中学，HIGH-高中，UNIVERSITY-大学 */
    @Excel(name = "适用对象类型")
    private String targetType;

    /** 是否默认模板：1-是，0-否 */
    @Excel(name = "是否默认模板", readConverterExp = "1=是,0=否")
    private String isDefault;

    /** 是否启用：1-启用，0-禁用 */
    @Excel(name = "是否启用", readConverterExp = "1=启用,0=禁用")
    private String enabled;

    /** 模板版本 */
    @Excel(name = "模板版本")
    private String version;

    /** 排序号 */
    @Excel(name = "排序号")
    private Integer sortOrder;

    /** 约束名称 */
    @Excel(name = "约束名称")
    private String constraintName;

    /** 约束类型 */
    @Excel(name = "约束类型")
    private String constraintType;

    /** 默认权重 */
    private Integer defaultWeight;

    /**
     * 获取模板ID
     * 
     * @return 模板ID
     */
    public Long getId() 
    {
        return id;
    }

    /**
     * 设置模板ID
     * 
     * @param id 模板ID
     */
    public void setId(Long id) 
    {
        this.id = id;
    }

    /**
     * 获取模板名称
     * 
     * @return 模板名称
     */
    public String getTemplateName() 
    {
        return templateName;
    }

    /**
     * 设置模板名称
     * 
     * @param templateName 模板名称
     */
    public void setTemplateName(String templateName) 
    {
        this.templateName = templateName;
    }

    /**
     * 获取模板描述
     * 
     * @return 模板描述
     */
    public String getDescription() 
    {
        return description;
    }

    /**
     * 设置模板描述
     * 
     * @param description 模板描述
     */
    public void setDescription(String description) 
    {
        this.description = description;
    }

    /**
     * 获取模板编码
     * 
     * @return 模板编码
     */
    public String getTemplateCode() 
    {
        return templateCode;
    }

    /**
     * 设置模板编码
     * 
     * @param templateCode 模板编码
     */
    public void setTemplateCode(String templateCode) 
    {
        this.templateCode = templateCode;
    }

    /**
     * 获取模板分类
     * 
     * @return 模板分类
     */
    public String getCategory() 
    {
        return category;
    }

    /**
     * 设置模板分类
     * 
     * @param category 模板分类
     */
    public void setCategory(String category) 
    {
        this.category = category;
    }

    /**
     * 获取适用对象类型
     * 
     * @return 适用对象类型
     */
    public String getTargetType() 
    {
        return targetType;
    }

    /**
     * 设置适用对象类型
     * 
     * @param targetType 适用对象类型
     */
    public void setTargetType(String targetType) 
    {
        this.targetType = targetType;
    }

    /**
     * 获取模板版本
     * 
     * @return 模板版本
     */
    public String getVersion() 
    {
        return version;
    }

    /**
     * 设置模板版本
     * 
     * @param version 模板版本
     */
    public void setVersion(String version) 
    {
        this.version = version;
    }

    /**
     * 获取是否启用
     * 
     * @return 是否启用
     */
    public String getEnabled() 
    {
        return enabled;
    }

    /**
     * 设置是否启用
     * 
     * @param enabled 是否启用
     */
    public void setEnabled(String enabled) 
    {
        this.enabled = enabled;
    }

    /**
     * 获取是否为系统默认模板
     * 
     * @return 是否为系统默认模板
     */
    public String getIsDefault() 
    {
        return isDefault;
    }

    /**
     * 设置是否为系统默认模板
     * 
     * @param isDefault 是否为系统默认模板
     */
    public void setIsDefault(String isDefault) 
    {
        this.isDefault = isDefault;
    }

    /**
     * 获取排序
     * 
     * @return 排序
     */
    public Integer getSortOrder() 
    {
        return sortOrder;
    }

    /**
     * 设置排序
     * 
     * @param sortOrder 排序
     */
    public void setSortOrder(Integer sortOrder) 
    {
        this.sortOrder = sortOrder;
    }

    /**
     * 获取约束名称
     * 
     * @return 约束名称
     */
    public String getConstraintName() 
    {
        return constraintName;
    }

    /**
     * 设置约束名称
     * 
     * @param constraintName 约束名称
     */
    public void setConstraintName(String constraintName) 
    {
        this.constraintName = constraintName;
    }

    /**
     * 获取约束类型
     * 
     * @return 约束类型
     */
    public String getConstraintType() 
    {
        return constraintType;
    }

    /**
     * 设置约束类型
     * 
     * @param constraintType 约束类型
     */
    public void setConstraintType(String constraintType) 
    {
        this.constraintType = constraintType;
    }

    // 关联的约束条件列表（非数据库字段）
    private List<AcTemplateConstraintRel> constraintRelations;

    /**
     * 获取关联的约束条件列表
     * 
     * @return 关联的约束条件列表
     */
    public List<AcTemplateConstraintRel> getConstraintRelations() 
    {
        return constraintRelations;
    }

    /**
     * 设置关联的约束条件列表
     * 
     * @param constraintRelations 关联的约束条件列表
     */
    public void setConstraintRelations(List<AcTemplateConstraintRel> constraintRelations) 
    {
        this.constraintRelations = constraintRelations;
    }

    /**
     * 判断是否为系统模板
     */
    public boolean isSystemTemplate() {
        return "SYSTEM".equals(this.category);
    }

    /**
     * 判断是否为自定义模板
     */
    public boolean isCustomTemplate() {
        return "CUSTOM".equals(this.category);
    }

    /**
     * 判断是否为默认模板
     */
    public boolean isDefaultTemplate() {
        return "1".equals(this.isDefault);
    }

    // public boolean isEnabled() {
    //     return "1".equals(this.enabled);
    // }

    /**
     * 获取适用对象类型描述
     */
    public String getTargetTypeDesc() {
        if (targetType == null) {
            return "通用";
        }
        switch (targetType) {
            case "PRIMARY":
                return "小学";
            case "MIDDLE":
                return "中学";
            case "HIGH":
                return "高中";
            case "UNIVERSITY":
                return "大学";
            case "GENERAL":
            default:
                return "通用";
        }
    }

    /**
     * 获取模板分类描述
     */
    public String getCategoryDesc() {
        if (category == null) {
            return "未知类型";
        }
        switch (category) {
            case "SYSTEM":
                return "系统模板";
            case "CUSTOM":
                return "自定义模板";
            default:
                return "未知类型";
        }
    }

    /**
     * 获取默认权重
     * @return 默认权重
     */
    public Integer getDefaultWeight() {
        return defaultWeight;
    }
    /**
     * 设置默认权重
     * @param defaultWeight 默认权重
     */
    public void setDefaultWeight(Integer defaultWeight) {
        this.defaultWeight = defaultWeight;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("templateName", getTemplateName())
            .append("templateCode", getTemplateCode())
            .append("description", getDescription())
            .append("category", getCategory())
            .append("targetType", getTargetType())
            .append("isDefault", getIsDefault())
            .append("enabled", getEnabled())
            .append("version", getVersion())
            .append("sortOrder", getSortOrder())
            .append("constraintName", getConstraintName())
            .append("constraintType", getConstraintType())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("remark", getRemark())
            .toString();
    }
}